Read Me First

#start to tidy up the data from here
##for point data, we have:
###commuter bus stop
###street intersections
###bike racks
###bus stop(muni)
###BART stations

##for line data, we have:
###elevation contour
###centerline of roads
###bike lane

##something else
###population(and also density)
###land use
#POINT DATA START FROM HERE

ZIPCODE V.S. COMMUTER BUS STOPS

read ZIP and Commuter data from the government first

Using POLY.COUNT, counts the dots in the POLYGON

  #Counting the number of point data in the polygon
  #count the point in each polygon
  ZIP.Codes <- readOGR(dsn="./San Francisco ZIP Codes", layer='ZIP_codes')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\San Francisco ZIP Codes", layer: "ZIP_codes"
## with 32 features
## It has 12 fields
  CommuterStop <- readOGR(dsn="./MTA.commutershuttles_stops", layer='commuter_stops')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\MTA.commutershuttles_stops", layer: "commuter_stops"
## with 160 features
## It has 29 fields
  CommuterStopCount = poly.counts(CommuterStop, ZIP.Codes)
  #a<-setNames(commuter_stop_count , ZIP_Codes@data$id)
  #a <-as.data.frame(a)
  ZipcodevsCommuterStop<-as.data.frame(cbind(zone=(ZIP.Codes@data$id),CommuterStopCount))
  # use "over" to merge spatial data,then cbind zipcode into spatial data
  #use [] to looko up stops in each zipcode zone
  overCommu <- over(CommuterStop,ZIP.Codes)
  listofCommuteStop <- cbind(zipcode=overCommu$id,CommuterStop@data)
  #let's look up one of them
  #listofCommuteStop$location[listofCommutestop$zipcode==94102]

plot

#Plot the zoning
plot(ZIP.Codes, border="black", lwd=0.5)

ZIPCODE V.S. STREET INTERSECTIONS

  streetint <- readOGR(dsn="./Street Intersections", layer='streetint')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\Street Intersections", layer: "streetint"
## with 18410 features
## It has 4 fields
  StreetintCount <- poly.counts(streetint, ZIP.Codes)

ZIPCODE V.S. BIKE RACKS & PARKING SPACE

bikerack <- readOGR(dsn="./MTA.bikeparking", layer='bikerack')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\MTA.bikeparking", layer: "bikerack"
## with 3463 features
## It has 18 fields
## Warning in readOGR(dsn = "./MTA.bikeparking", layer = "bikerack"): Dropping
## null geometries: 649
BikerackCount <- poly.counts(bikerack, ZIP.Codes)
ZipcodevsBikerack<-as.data.frame(cbind(zone=c(ZIP.Codes@data$id),BikerackCount))
#fortunately,a rack has two spaceS
parkingspacing = BikerackCount*2
ZipcodevsBikeparkingspacek<-as.data.frame(cbind(zone=c(ZIP.Codes@data$id),parkingspacing))

ZIPCODE V.S. BUS STOP (MUNI)

busstop <- readOGR(dsn="./MTA.Muni_stops", layer='busstop')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\MTA.Muni_stops", layer: "busstop"
## with 3585 features
## It has 25 fields
BusstopCount <-  poly.counts(busstop, ZIP.Codes)
ZipcodevsBusstop <-as.data.frame(cbind(zone=c(ZIP.Codes@data$id),BusstopCount))

overbusstop <- over(busstop,ZIP.Codes)
listofBusstop <- cbind(zipcode=overbusstop$id,busstop@data)
#LINE DATA START FROM HERE

ZIPCODE V.S. CONTOUR(SLOPE)

CALCULATE THE LENGTH OF ELEVATION contour IN EACH POLYGON

contour <- readOGR(dsn="./Elevation Contours", layer='contour')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\Elevation Contours", layer: "contour"
## with 14151 features
## It has 4 fields
polyContour <- read_sf("./San Francisco ZIP Codes/ZIP_codes.shp")
lineContour <- read_sf("./Elevation Contours/contour.shp")


# intersection
intContour <- st_intersection(lineContour, polyContour)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant
## throughout all geometries
# find out about the length of each line segment
intContour$len <- st_length(intContour)
# use a meaningful id (so far consists only of 0s)
polyContour$Id <- 1:nrow(polyContour)
# spatial overlay
joinContour <- st_join(polyContour, intContour)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
# use the ID of the polygon for the aggregation
outContour <- group_by(joinContour, id.x) %>%
  summarize(length = sum(len))
# find out about polygons without line segments 
filter(outContour, is.na(length))
## Simple feature collection with 2 features and 2 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -122.4256 ymin: 37.76409 xmax: -122.3814 ymax: 37.82846
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 2 x 3
##    id.x length                                                     geometry
##   <dbl> <S3: unit>                                      <MULTIPOLYGON [°]>
## 1 94133 NA [m]     (((-122.4242 37.82834, -122.4241 37.8283, -122.4241 37.~
## 2 94158 NA [m]     (((-122.3908 37.77667, -122.3926 37.7752, -122.3927 37.~
# you can set the length of the polygons without line intersections to 0 
# if you want
mutate(outContour, length = ifelse(is.na(length), 0, length))
## Simple feature collection with 27 features and 2 fields
## geometry type:  GEOMETRY
## dimension:      XY
## bbox:           xmin: -122.5178 ymin: 37.70776 xmax: -122.357 ymax: 37.8333
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 27 x 3
##     id.x  length                                                   geometry
##    <dbl>   <dbl>                                             <POLYGON [°]>
##  1 94102  94815. ((-122.4059 37.78572, -122.406 37.78565, -122.4063 37.785~
##  2 94103  90676. ((-122.3989 37.78378, -122.3994 37.78344, -122.3997 37.78~
##  3 94104  10684. ((-122.3992 37.79105, -122.3995 37.79078, -122.3999 37.79~
##  4 94105  52699. ((-122.3917 37.79411, -122.3917 37.79408, -122.3917 37.79~
##  5 94107 321634. ((-122.3878 37.78291, -122.3874 37.78283, -122.3847 37.78~
##  6 94108  94741. ((-122.4124 37.79066, -122.4124 37.79095, -122.4128 37.79~
##  7 94109 268535. ((-122.4228 37.81025, -122.4213 37.80918, -122.4212 37.80~
##  8 94110 464501. ((-122.4051 37.76463, -122.4051 37.76454, -122.4051 37.76~
##  9 94111  65847. ((-122.3917 37.79411, -122.392 37.79409, -122.3924 37.793~
## 10 94112 659702. ((-122.4207 37.73194, -122.4206 37.73177, -122.4206 37.73~
## # ... with 17 more rows

ZIPCODE V.S. CENTERLINE(ROADS)

calculate the length of line segment in polygon-CENTERLINE

#read centerline data, spatial data download from DATASF
centerline <- readOGR(dsn="./San Francisco Basemap Street Centerlines", layer='centerline')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\San Francisco Basemap Street Centerlines", layer: "centerline"
## with 16241 features
## It has 21 fields
polyCent <- read_sf("./San Francisco ZIP Codes/ZIP_codes.shp")
lineCent <- read_sf("./San Francisco Basemap Street Centerlines/centerline.shp")

# intersection
intCent <- st_intersection(lineCent, polyCent)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant
## throughout all geometries
# find out about the length of each line segment
intCent$len <- st_length(intCent)
# use a meaningful id (so far consists only of 0s)
polyCent$Id <- 1:nrow(polyCent)
# spatial overlay
joinCent <- st_join(polyCent, intCent)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
# use the ID of the polygon for the aggregation
outCent <- group_by(joinCent, Id) %>%
  summarize(length = sum(len))
# find out about polygons without line segments 
filter(outCent, is.na(length))
## Simple feature collection with 5 features and 2 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -122.5178 ymin: 37.76668 xmax: -122.3825 ymax: 37.82846
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 5 x 3
##      Id length                                                     geometry
##   <int> <S3: unit>                                           <POLYGON [°]>
## 1     6 NA [m]     ((-122.4242 37.82834, -122.4241 37.8283, -122.4241 37.8~
## 2    10 NA [m]     ((-122.3839 37.76813, -122.3839 37.76808, -122.3838 37.~
## 3    11 NA [m]     ((-122.3833 37.76696, -122.3833 37.76694, -122.3834 37.~
## 4    27 NA [m]     ((-122.5156 37.77824, -122.5156 37.77816, -122.5155 37.~
## 5    28 NA [m]     ((-122.5176 37.78059, -122.5176 37.78057, -122.5175 37.~
# you can set the length of the polygons without line intersections to 0 
# if you want
mutate(outCent, length = ifelse(is.na(length), 0, length))
## Simple feature collection with 32 features and 2 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -122.5178 ymin: 37.70776 xmax: -122.357 ymax: 37.8333
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 32 x 3
##       Id  length                                                   geometry
##    <int>   <dbl>                                             <POLYGON [°]>
##  1     1 157038. ((-122.3801 37.75276, -122.3801 37.75244, -122.3801 37.75~
##  2     2  92581. ((-122.4443 37.7316, -122.4466 37.7316, -122.4473 37.7315~
##  3     3  99857. ((-122.4555 37.76091, -122.4555 37.76027, -122.4536 37.76~
##  4     4  43214. ((-122.4191 37.81155, -122.419 37.81147, -122.4189 37.811~
##  5     5 116796. ((-122.4863 37.73682, -122.4862 37.73681, -122.486 37.736~
##  6     6      0  ((-122.4242 37.82834, -122.4241 37.8283, -122.4241 37.828~
##  7     7 117111. ((-122.3915 37.70967, -122.3916 37.70966, -122.3916 37.70~
##  8     8  40570. ((-122.4059 37.78572, -122.406 37.78565, -122.4063 37.785~
##  9     9  22819. ((-122.3908 37.77667, -122.3926 37.7752, -122.3927 37.775~
## 10    10      0  ((-122.3839 37.76813, -122.3839 37.76808, -122.3838 37.76~
## # ... with 22 more rows
#get road type and their zipcode
aggStrtype <- aggregate(intCent$len,by=list(intCent$zip_code,intCent$st_type), FUN=sum, na.rm=TRUE)

ZIPCODE V.S. DIFFERENT ROADTYPE AND THEIR LENGTH

this data is under “CENTERLINE”

#read a tidy csv
ZipStr <- read.csv('./zipcode_sttype.csv',sep=",", header=TRUE)
 
#remove the "[]" in each length
library(stringr)
ALY <- str_replace_all(ZipStr$ALY,"\\[|\\]","")
AVE <- str_replace_all(ZipStr$AVE,"\\[|\\]","")
BLVD <- str_replace_all(ZipStr$BLVD,"\\[|\\]","")
CIR <- str_replace_all(ZipStr$CIR,"\\[|\\]","")
CT <- str_replace_all(ZipStr$CT,"\\[|\\]","")
DR <- str_replace_all(ZipStr$DR,"\\[|\\]","")
HL <- str_replace_all(ZipStr$HL,"\\[|\\]","")
HWY <- str_replace_all(ZipStr$HWY,"\\[|\\]","")
LN <- str_replace_all(ZipStr$LN,"\\[|\\]","")
LOOP <- str_replace_all(ZipStr$LOOP,"\\[|\\]","")
PARK <- str_replace_all(ZipStr$PARK,"\\[|\\]","")
PATH <- str_replace_all(ZipStr$PATH,"\\[|\\]","")
PL<- str_replace_all(ZipStr$PL,"\\[|\\]","")
PLZ <- str_replace_all(ZipStr$PLZ,"\\[|\\]","")
RAMP <- str_replace_all(ZipStr$RAMP,"\\[|\\]","")
RD <- str_replace_all(ZipStr$RD,"\\[|\\]","")
ROW <- str_replace_all(ZipStr$ROW,"\\[|\\]","")
ST <- str_replace_all(ZipStr$ST,"\\[|\\]","")
STPS <- str_replace_all(ZipStr$STPS,"\\[|\\]","")
STWY <- str_replace_all(ZipStr$STWY,"\\[|\\]","")
TER <- str_replace_all(ZipStr$TER,"\\[|\\]","")
TUNL <- str_replace_all(ZipStr$TUNL,"\\[|\\]","")
WALK <- str_replace_all(ZipStr$WALK,"\\[|\\]","")
WAY <- str_replace_all(ZipStr$WAY,"\\[|\\]","")

#combined 25 different types of roads by column and add "zone"(which is zipcode) to the first column 
new <- cbind(ALY, AVE, BLVD, CIR, CT, DR, HL, HWY, LN, LOOP, PARK, PATH, PL, PLZ, RAMP, RD, ROW, ST, STPS, STWY, TER, TUNL, WALK, WAY)

ZipcodevsStrtype<-as.data.frame(cbind(zone=(ZipStr$ï..zone),new))

ZIPCODE V.S. BIKE LANE

#read bikeway data, spatial data download from DATASF
bikeway <- readOGR(dsn="./Bikeway Network", layer='bikeway')
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\Donald\Desktop\final project\Bikeway Network", layer: "bikeway"
## with 5175 features
## It has 37 fields
polyBky <- read_sf("./San Francisco ZIP Codes/ZIP_codes.shp")
lineBky <- read_sf("./Bikeway Network/bikeway.shp")
# intersection
intBky <- st_intersection(lineCent, polyCent)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant
## throughout all geometries
# find out about the length of each line segment
intBky$len <- st_length(intBky)
# use a meaningful id (so far consists only of 0s)
polyBky$Id <- 1:nrow(polyBky)
# spatial overlay
joinBky <- st_join(polyBky, intBky)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
# use the ID of the polygon for the aggregation
outBky <- group_by(joinBky, id.x) %>%
  summarize(length = sum(len))
# find out about polygons without line segments 
filter(outBky, is.na(length))
## Simple feature collection with 3 features and 2 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -122.5178 ymin: 37.76409 xmax: -122.3814 ymax: 37.82846
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 3 x 3
##    id.x length                                                     geometry
##   <dbl> <S3: unit>                                      <MULTIPOLYGON [°]>
## 1 94121 NA [m]     (((-122.5156 37.77824, -122.5156 37.77816, -122.5155 37~
## 2 94133 NA [m]     (((-122.4242 37.82834, -122.4241 37.8283, -122.4241 37.~
## 3 94158 NA [m]     (((-122.3908 37.77667, -122.3926 37.7752, -122.3927 37.~
# you can set the length of the polygons without line intersections to 0 
# if you want
mutate(outBky, length = ifelse(is.na(length), 0, length))
## Simple feature collection with 27 features and 2 fields
## geometry type:  GEOMETRY
## dimension:      XY
## bbox:           xmin: -122.5178 ymin: 37.70776 xmax: -122.357 ymax: 37.8333
## epsg (SRID):    4326
## proj4string:    +proj=longlat +ellps=WGS84 +no_defs
## # A tibble: 27 x 3
##     id.x  length                                                   geometry
##    <dbl>   <dbl>                                             <POLYGON [°]>
##  1 94102  40570. ((-122.4059 37.78572, -122.406 37.78565, -122.4063 37.785~
##  2 94103  81420. ((-122.3989 37.78378, -122.3994 37.78344, -122.3997 37.78~
##  3 94104   5646. ((-122.3992 37.79105, -122.3995 37.79078, -122.3999 37.79~
##  4 94105  26680. ((-122.3917 37.79411, -122.3917 37.79408, -122.3917 37.79~
##  5 94107  97141. ((-122.3878 37.78291, -122.3874 37.78283, -122.3847 37.78~
##  6 94108  18757. ((-122.4124 37.79066, -122.4124 37.79095, -122.4128 37.79~
##  7 94109  58003. ((-122.4228 37.81025, -122.4213 37.80918, -122.4212 37.80~
##  8 94110 145254. ((-122.4051 37.76463, -122.4051 37.76454, -122.4051 37.76~
##  9 94111  19495. ((-122.3917 37.79411, -122.392 37.79409, -122.3924 37.793~
## 10 94112 186634. ((-122.4207 37.73194, -122.4206 37.73177, -122.4206 37.73~
## # ... with 17 more rows

ZIPCODE V.S. POPULATION/AREA/DENSITY

#population data is in the ZIP_codes data
b <- as.data.frame(ZIP.Codes@data$pop2010)
c <- as.data.frame(ZIP.Codes@data$id)
d <- as.data.frame(ZIP.Codes@data$sqmi)
dd = b/d
pop <- cbind(zone=c(ZIP.Codes@data$id), population=c(ZIP.Codes@data$pop2010), area=c(ZIP.Codes@data$sqmi), density=c(dd$`ZIP.Codes@data$pop2010`))
pop
##        zone population area   density
##  [1,] 94124      37233 4.87  7645.380
##  [2,] 94127      19116 1.70 11244.706
##  [3,] 94131      24202 2.17 11152.995
##  [4,] 94133      24966 0.73 34200.000
##  [5,] 94132      26986 4.19  6440.573
##  [6,] 94133      24966 0.73 34200.000
##  [7,] 94134      36129 2.57 14057.977
##  [8,] 94102      40644 0.68 59770.588
##  [9,] 94158       4761 0.50  9522.000
## [10,] 94158       4761 0.50  9522.000
## [11,] 94158       4761 0.50  9522.000
## [12,] 94103      30364 1.33 22830.075
## [13,] 94104       1524 0.08 19050.000
## [14,] 94105      20802 0.45 46226.667
## [15,] 94107      13178 1.86  7084.946
## [16,] 94108      12303 0.28 43939.286
## [17,] 94109      51223 1.03 49731.068
## [18,] 94110      67159 2.40 27982.917
## [19,] 94111       4526 0.40 11315.000
## [20,] 94112      82784 3.30 25086.061
## [21,] 94114      31685 1.46 21702.055
## [22,] 94115      28486 1.10 25896.364
## [23,] 94116      42865 2.62 16360.687
## [24,] 94117      39182 1.24 31598.387
## [25,] 94118      37424 1.86 20120.430
## [26,] 94121      41193 2.19 18809.589
## [27,] 94121      41193 2.19 18809.589
## [28,] 94121      41193 2.19 18809.589
## [29,] 94122      56061 3.96 14156.818
## [30,] 94123      22715 1.14 19925.439
## [31,] 94129       3541 2.35  1506.809
## [32,] 94130       2880 0.88  3272.727

PRACTICE OF TMAP PACKAGE

#library(tmap)
#library(tmaptools)
#as.integer(ZIP.Codes@data$pop2010)
#qtm(ZIP.Codes, "pop2010")
#qtm(ZIP.Codes, "sqmi")

PLOTTING!!!!!!

first of all: draw something

read TRIP data and then ,read GOOGLE map(by usibg lat,lon)

maptype could be :roadmap, terrain; source could be google or stamen

use get_map from one of the package above .

## Visualization on the google map
#read file
df <- read.csv('./sf_tripdata.csv', sep=",", header=TRUE)
#read GoogleAPI key
register_google(key = "AIzaSyD0Ff6iIaMA3m9yWDgLC8BUrWVSs8j_eYA")
#define the area by long and lat
mpls <- get_map(c(left = -122.5612, 
                  bottom = 37.69194, 
                  right = -122.3047, 
                  top = 37.8567),
                maptype="terrain", source="google", zoom=15)
## 480 tiles needed, this may take a while (try a smaller zoom).
## Source : http://tile.stamen.com/terrain/15/5228/12656.png
## Source : http://tile.stamen.com/terrain/15/5229/12656.png
## Source : http://tile.stamen.com/terrain/15/5230/12656.png
## Source : http://tile.stamen.com/terrain/15/5231/12656.png
## Source : http://tile.stamen.com/terrain/15/5232/12656.png
## Source : http://tile.stamen.com/terrain/15/5233/12656.png
## Source : http://tile.stamen.com/terrain/15/5234/12656.png
## Source : http://tile.stamen.com/terrain/15/5235/12656.png
## Source : http://tile.stamen.com/terrain/15/5236/12656.png
## Source : http://tile.stamen.com/terrain/15/5237/12656.png
## Source : http://tile.stamen.com/terrain/15/5238/12656.png
## Source : http://tile.stamen.com/terrain/15/5239/12656.png
## Source : http://tile.stamen.com/terrain/15/5240/12656.png
## Source : http://tile.stamen.com/terrain/15/5241/12656.png
## Source : http://tile.stamen.com/terrain/15/5242/12656.png
## Source : http://tile.stamen.com/terrain/15/5243/12656.png
## Source : http://tile.stamen.com/terrain/15/5244/12656.png
## Source : http://tile.stamen.com/terrain/15/5245/12656.png
## Source : http://tile.stamen.com/terrain/15/5246/12656.png
## Source : http://tile.stamen.com/terrain/15/5247/12656.png
## Source : http://tile.stamen.com/terrain/15/5248/12656.png
## Source : http://tile.stamen.com/terrain/15/5249/12656.png
## Source : http://tile.stamen.com/terrain/15/5250/12656.png
## Source : http://tile.stamen.com/terrain/15/5251/12656.png
## Source : http://tile.stamen.com/terrain/15/5228/12657.png
## Source : http://tile.stamen.com/terrain/15/5229/12657.png
## Source : http://tile.stamen.com/terrain/15/5230/12657.png
## Source : http://tile.stamen.com/terrain/15/5231/12657.png
## Source : http://tile.stamen.com/terrain/15/5232/12657.png
## Source : http://tile.stamen.com/terrain/15/5233/12657.png
## Source : http://tile.stamen.com/terrain/15/5234/12657.png
## Source : http://tile.stamen.com/terrain/15/5235/12657.png
## Source : http://tile.stamen.com/terrain/15/5236/12657.png
## Source : http://tile.stamen.com/terrain/15/5237/12657.png
## Source : http://tile.stamen.com/terrain/15/5238/12657.png
## Source : http://tile.stamen.com/terrain/15/5239/12657.png
## Source : http://tile.stamen.com/terrain/15/5240/12657.png
## Source : http://tile.stamen.com/terrain/15/5241/12657.png
## Source : http://tile.stamen.com/terrain/15/5242/12657.png
## Source : http://tile.stamen.com/terrain/15/5243/12657.png
## Source : http://tile.stamen.com/terrain/15/5244/12657.png
## Source : http://tile.stamen.com/terrain/15/5245/12657.png
## Source : http://tile.stamen.com/terrain/15/5246/12657.png
## Source : http://tile.stamen.com/terrain/15/5247/12657.png
## Source : http://tile.stamen.com/terrain/15/5248/12657.png
## Source : http://tile.stamen.com/terrain/15/5249/12657.png
## Source : http://tile.stamen.com/terrain/15/5250/12657.png
## Source : http://tile.stamen.com/terrain/15/5251/12657.png
## Source : http://tile.stamen.com/terrain/15/5228/12658.png
## Source : http://tile.stamen.com/terrain/15/5229/12658.png
## Source : http://tile.stamen.com/terrain/15/5230/12658.png
## Source : http://tile.stamen.com/terrain/15/5231/12658.png
## Source : http://tile.stamen.com/terrain/15/5232/12658.png
## Source : http://tile.stamen.com/terrain/15/5233/12658.png
## Source : http://tile.stamen.com/terrain/15/5234/12658.png
## Source : http://tile.stamen.com/terrain/15/5235/12658.png
## Source : http://tile.stamen.com/terrain/15/5236/12658.png
## Source : http://tile.stamen.com/terrain/15/5237/12658.png
## Source : http://tile.stamen.com/terrain/15/5238/12658.png
## Source : http://tile.stamen.com/terrain/15/5239/12658.png
## Source : http://tile.stamen.com/terrain/15/5240/12658.png
## Source : http://tile.stamen.com/terrain/15/5241/12658.png
## Source : http://tile.stamen.com/terrain/15/5242/12658.png
## Source : http://tile.stamen.com/terrain/15/5243/12658.png
## Source : http://tile.stamen.com/terrain/15/5244/12658.png
## Source : http://tile.stamen.com/terrain/15/5245/12658.png
## Source : http://tile.stamen.com/terrain/15/5246/12658.png
## Source : http://tile.stamen.com/terrain/15/5247/12658.png
## Source : http://tile.stamen.com/terrain/15/5248/12658.png
## Source : http://tile.stamen.com/terrain/15/5249/12658.png
## Source : http://tile.stamen.com/terrain/15/5250/12658.png
## Source : http://tile.stamen.com/terrain/15/5251/12658.png
## Source : http://tile.stamen.com/terrain/15/5228/12659.png
## Source : http://tile.stamen.com/terrain/15/5229/12659.png
## Source : http://tile.stamen.com/terrain/15/5230/12659.png
## Source : http://tile.stamen.com/terrain/15/5231/12659.png
## Source : http://tile.stamen.com/terrain/15/5232/12659.png
## Source : http://tile.stamen.com/terrain/15/5233/12659.png
## Source : http://tile.stamen.com/terrain/15/5234/12659.png
## Source : http://tile.stamen.com/terrain/15/5235/12659.png
## Source : http://tile.stamen.com/terrain/15/5236/12659.png
## Source : http://tile.stamen.com/terrain/15/5237/12659.png
## Source : http://tile.stamen.com/terrain/15/5238/12659.png
## Source : http://tile.stamen.com/terrain/15/5239/12659.png
## Source : http://tile.stamen.com/terrain/15/5240/12659.png
## Source : http://tile.stamen.com/terrain/15/5241/12659.png
## Source : http://tile.stamen.com/terrain/15/5242/12659.png
## Source : http://tile.stamen.com/terrain/15/5243/12659.png
## Source : http://tile.stamen.com/terrain/15/5244/12659.png
## Source : http://tile.stamen.com/terrain/15/5245/12659.png
## Source : http://tile.stamen.com/terrain/15/5246/12659.png
## Source : http://tile.stamen.com/terrain/15/5247/12659.png
## Source : http://tile.stamen.com/terrain/15/5248/12659.png
## Source : http://tile.stamen.com/terrain/15/5249/12659.png
## Source : http://tile.stamen.com/terrain/15/5250/12659.png
## Source : http://tile.stamen.com/terrain/15/5251/12659.png
## Source : http://tile.stamen.com/terrain/15/5228/12660.png
## Source : http://tile.stamen.com/terrain/15/5229/12660.png
## Source : http://tile.stamen.com/terrain/15/5230/12660.png
## Source : http://tile.stamen.com/terrain/15/5231/12660.png
## Source : http://tile.stamen.com/terrain/15/5232/12660.png
## Source : http://tile.stamen.com/terrain/15/5233/12660.png
## Source : http://tile.stamen.com/terrain/15/5234/12660.png
## Source : http://tile.stamen.com/terrain/15/5235/12660.png
## Source : http://tile.stamen.com/terrain/15/5236/12660.png
## Source : http://tile.stamen.com/terrain/15/5237/12660.png
## Source : http://tile.stamen.com/terrain/15/5238/12660.png
## Source : http://tile.stamen.com/terrain/15/5239/12660.png
## Source : http://tile.stamen.com/terrain/15/5240/12660.png
## Source : http://tile.stamen.com/terrain/15/5241/12660.png
## Source : http://tile.stamen.com/terrain/15/5242/12660.png
## Source : http://tile.stamen.com/terrain/15/5243/12660.png
## Source : http://tile.stamen.com/terrain/15/5244/12660.png
## Source : http://tile.stamen.com/terrain/15/5245/12660.png
## Source : http://tile.stamen.com/terrain/15/5246/12660.png
## Source : http://tile.stamen.com/terrain/15/5247/12660.png
## Source : http://tile.stamen.com/terrain/15/5248/12660.png
## Source : http://tile.stamen.com/terrain/15/5249/12660.png
## Source : http://tile.stamen.com/terrain/15/5250/12660.png
## Source : http://tile.stamen.com/terrain/15/5251/12660.png
## Source : http://tile.stamen.com/terrain/15/5228/12661.png
## Source : http://tile.stamen.com/terrain/15/5229/12661.png
## Source : http://tile.stamen.com/terrain/15/5230/12661.png
## Source : http://tile.stamen.com/terrain/15/5231/12661.png
## Source : http://tile.stamen.com/terrain/15/5232/12661.png
## Source : http://tile.stamen.com/terrain/15/5233/12661.png
## Source : http://tile.stamen.com/terrain/15/5234/12661.png
## Source : http://tile.stamen.com/terrain/15/5235/12661.png
## Source : http://tile.stamen.com/terrain/15/5236/12661.png
## Source : http://tile.stamen.com/terrain/15/5237/12661.png
## Source : http://tile.stamen.com/terrain/15/5238/12661.png
## Source : http://tile.stamen.com/terrain/15/5239/12661.png
## Source : http://tile.stamen.com/terrain/15/5240/12661.png
## Source : http://tile.stamen.com/terrain/15/5241/12661.png
## Source : http://tile.stamen.com/terrain/15/5242/12661.png
## Source : http://tile.stamen.com/terrain/15/5243/12661.png
## Source : http://tile.stamen.com/terrain/15/5244/12661.png
## Source : http://tile.stamen.com/terrain/15/5245/12661.png
## Source : http://tile.stamen.com/terrain/15/5246/12661.png
## Source : http://tile.stamen.com/terrain/15/5247/12661.png
## Source : http://tile.stamen.com/terrain/15/5248/12661.png
## Source : http://tile.stamen.com/terrain/15/5249/12661.png
## Source : http://tile.stamen.com/terrain/15/5250/12661.png
## Source : http://tile.stamen.com/terrain/15/5251/12661.png
## Source : http://tile.stamen.com/terrain/15/5228/12662.png
## Source : http://tile.stamen.com/terrain/15/5229/12662.png
## Source : http://tile.stamen.com/terrain/15/5230/12662.png
## Source : http://tile.stamen.com/terrain/15/5231/12662.png
## Source : http://tile.stamen.com/terrain/15/5232/12662.png
## Source : http://tile.stamen.com/terrain/15/5233/12662.png
## Source : http://tile.stamen.com/terrain/15/5234/12662.png
## Source : http://tile.stamen.com/terrain/15/5235/12662.png
## Source : http://tile.stamen.com/terrain/15/5236/12662.png
## Source : http://tile.stamen.com/terrain/15/5237/12662.png
## Source : http://tile.stamen.com/terrain/15/5238/12662.png
## Source : http://tile.stamen.com/terrain/15/5239/12662.png
## Source : http://tile.stamen.com/terrain/15/5240/12662.png
## Source : http://tile.stamen.com/terrain/15/5241/12662.png
## Source : http://tile.stamen.com/terrain/15/5242/12662.png
## Source : http://tile.stamen.com/terrain/15/5243/12662.png
## Source : http://tile.stamen.com/terrain/15/5244/12662.png
## Source : http://tile.stamen.com/terrain/15/5245/12662.png
## Source : http://tile.stamen.com/terrain/15/5246/12662.png
## Source : http://tile.stamen.com/terrain/15/5247/12662.png
## Source : http://tile.stamen.com/terrain/15/5248/12662.png
## Source : http://tile.stamen.com/terrain/15/5249/12662.png
## Source : http://tile.stamen.com/terrain/15/5250/12662.png
## Source : http://tile.stamen.com/terrain/15/5251/12662.png
## Source : http://tile.stamen.com/terrain/15/5228/12663.png
## Source : http://tile.stamen.com/terrain/15/5229/12663.png
## Source : http://tile.stamen.com/terrain/15/5230/12663.png
## Source : http://tile.stamen.com/terrain/15/5231/12663.png
## Source : http://tile.stamen.com/terrain/15/5232/12663.png
## Source : http://tile.stamen.com/terrain/15/5233/12663.png
## Source : http://tile.stamen.com/terrain/15/5234/12663.png
## Source : http://tile.stamen.com/terrain/15/5235/12663.png
## Source : http://tile.stamen.com/terrain/15/5236/12663.png
## Source : http://tile.stamen.com/terrain/15/5237/12663.png
## Source : http://tile.stamen.com/terrain/15/5238/12663.png
## Source : http://tile.stamen.com/terrain/15/5239/12663.png
## Source : http://tile.stamen.com/terrain/15/5240/12663.png
## Source : http://tile.stamen.com/terrain/15/5241/12663.png
## Source : http://tile.stamen.com/terrain/15/5242/12663.png
## Source : http://tile.stamen.com/terrain/15/5243/12663.png
## Source : http://tile.stamen.com/terrain/15/5244/12663.png
## Source : http://tile.stamen.com/terrain/15/5245/12663.png
## Source : http://tile.stamen.com/terrain/15/5246/12663.png
## Source : http://tile.stamen.com/terrain/15/5247/12663.png
## Source : http://tile.stamen.com/terrain/15/5248/12663.png
## Source : http://tile.stamen.com/terrain/15/5249/12663.png
## Source : http://tile.stamen.com/terrain/15/5250/12663.png
## Source : http://tile.stamen.com/terrain/15/5251/12663.png
## Source : http://tile.stamen.com/terrain/15/5228/12664.png
## Source : http://tile.stamen.com/terrain/15/5229/12664.png
## Source : http://tile.stamen.com/terrain/15/5230/12664.png
## Source : http://tile.stamen.com/terrain/15/5231/12664.png
## Source : http://tile.stamen.com/terrain/15/5232/12664.png
## Source : http://tile.stamen.com/terrain/15/5233/12664.png
## Source : http://tile.stamen.com/terrain/15/5234/12664.png
## Source : http://tile.stamen.com/terrain/15/5235/12664.png
## Source : http://tile.stamen.com/terrain/15/5236/12664.png
## Source : http://tile.stamen.com/terrain/15/5237/12664.png
## Source : http://tile.stamen.com/terrain/15/5238/12664.png
## Source : http://tile.stamen.com/terrain/15/5239/12664.png
## Source : http://tile.stamen.com/terrain/15/5240/12664.png
## Source : http://tile.stamen.com/terrain/15/5241/12664.png
## Source : http://tile.stamen.com/terrain/15/5242/12664.png
## Source : http://tile.stamen.com/terrain/15/5243/12664.png
## Source : http://tile.stamen.com/terrain/15/5244/12664.png
## Source : http://tile.stamen.com/terrain/15/5245/12664.png
## Source : http://tile.stamen.com/terrain/15/5246/12664.png
## Source : http://tile.stamen.com/terrain/15/5247/12664.png
## Source : http://tile.stamen.com/terrain/15/5248/12664.png
## Source : http://tile.stamen.com/terrain/15/5249/12664.png
## Source : http://tile.stamen.com/terrain/15/5250/12664.png
## Source : http://tile.stamen.com/terrain/15/5251/12664.png
## Source : http://tile.stamen.com/terrain/15/5228/12665.png
## Source : http://tile.stamen.com/terrain/15/5229/12665.png
## Source : http://tile.stamen.com/terrain/15/5230/12665.png
## Source : http://tile.stamen.com/terrain/15/5231/12665.png
## Source : http://tile.stamen.com/terrain/15/5232/12665.png
## Source : http://tile.stamen.com/terrain/15/5233/12665.png
## Source : http://tile.stamen.com/terrain/15/5234/12665.png
## Source : http://tile.stamen.com/terrain/15/5235/12665.png
## Source : http://tile.stamen.com/terrain/15/5236/12665.png
## Source : http://tile.stamen.com/terrain/15/5237/12665.png
## Source : http://tile.stamen.com/terrain/15/5238/12665.png
## Source : http://tile.stamen.com/terrain/15/5239/12665.png
## Source : http://tile.stamen.com/terrain/15/5240/12665.png
## Source : http://tile.stamen.com/terrain/15/5241/12665.png
## Source : http://tile.stamen.com/terrain/15/5242/12665.png
## Source : http://tile.stamen.com/terrain/15/5243/12665.png
## Source : http://tile.stamen.com/terrain/15/5244/12665.png
## Source : http://tile.stamen.com/terrain/15/5245/12665.png
## Source : http://tile.stamen.com/terrain/15/5246/12665.png
## Source : http://tile.stamen.com/terrain/15/5247/12665.png
## Source : http://tile.stamen.com/terrain/15/5248/12665.png
## Source : http://tile.stamen.com/terrain/15/5249/12665.png
## Source : http://tile.stamen.com/terrain/15/5250/12665.png
## Source : http://tile.stamen.com/terrain/15/5251/12665.png
## Source : http://tile.stamen.com/terrain/15/5228/12666.png
## Source : http://tile.stamen.com/terrain/15/5229/12666.png
## Source : http://tile.stamen.com/terrain/15/5230/12666.png
## Source : http://tile.stamen.com/terrain/15/5231/12666.png
## Source : http://tile.stamen.com/terrain/15/5232/12666.png
## Source : http://tile.stamen.com/terrain/15/5233/12666.png
## Source : http://tile.stamen.com/terrain/15/5234/12666.png
## Source : http://tile.stamen.com/terrain/15/5235/12666.png
## Source : http://tile.stamen.com/terrain/15/5236/12666.png
## Source : http://tile.stamen.com/terrain/15/5237/12666.png
## Source : http://tile.stamen.com/terrain/15/5238/12666.png
## Source : http://tile.stamen.com/terrain/15/5239/12666.png
## Source : http://tile.stamen.com/terrain/15/5240/12666.png
## Source : http://tile.stamen.com/terrain/15/5241/12666.png
## Source : http://tile.stamen.com/terrain/15/5242/12666.png
## Source : http://tile.stamen.com/terrain/15/5243/12666.png
## Source : http://tile.stamen.com/terrain/15/5244/12666.png
## Source : http://tile.stamen.com/terrain/15/5245/12666.png
## Source : http://tile.stamen.com/terrain/15/5246/12666.png
## Source : http://tile.stamen.com/terrain/15/5247/12666.png
## Source : http://tile.stamen.com/terrain/15/5248/12666.png
## Source : http://tile.stamen.com/terrain/15/5249/12666.png
## Source : http://tile.stamen.com/terrain/15/5250/12666.png
## Source : http://tile.stamen.com/terrain/15/5251/12666.png
## Source : http://tile.stamen.com/terrain/15/5228/12667.png
## Source : http://tile.stamen.com/terrain/15/5229/12667.png
## Source : http://tile.stamen.com/terrain/15/5230/12667.png
## Source : http://tile.stamen.com/terrain/15/5231/12667.png
## Source : http://tile.stamen.com/terrain/15/5232/12667.png
## Source : http://tile.stamen.com/terrain/15/5233/12667.png
## Source : http://tile.stamen.com/terrain/15/5234/12667.png
## Source : http://tile.stamen.com/terrain/15/5235/12667.png
## Source : http://tile.stamen.com/terrain/15/5236/12667.png
## Source : http://tile.stamen.com/terrain/15/5237/12667.png
## Source : http://tile.stamen.com/terrain/15/5238/12667.png
## Source : http://tile.stamen.com/terrain/15/5239/12667.png
## Source : http://tile.stamen.com/terrain/15/5240/12667.png
## Source : http://tile.stamen.com/terrain/15/5241/12667.png
## Source : http://tile.stamen.com/terrain/15/5242/12667.png
## Source : http://tile.stamen.com/terrain/15/5243/12667.png
## Source : http://tile.stamen.com/terrain/15/5244/12667.png
## Source : http://tile.stamen.com/terrain/15/5245/12667.png
## Source : http://tile.stamen.com/terrain/15/5246/12667.png
## Source : http://tile.stamen.com/terrain/15/5247/12667.png
## Source : http://tile.stamen.com/terrain/15/5248/12667.png
## Source : http://tile.stamen.com/terrain/15/5249/12667.png
## Source : http://tile.stamen.com/terrain/15/5250/12667.png
## Source : http://tile.stamen.com/terrain/15/5251/12667.png
## Source : http://tile.stamen.com/terrain/15/5228/12668.png
## Source : http://tile.stamen.com/terrain/15/5229/12668.png
## Source : http://tile.stamen.com/terrain/15/5230/12668.png
## Source : http://tile.stamen.com/terrain/15/5231/12668.png
## Source : http://tile.stamen.com/terrain/15/5232/12668.png
## Source : http://tile.stamen.com/terrain/15/5233/12668.png
## Source : http://tile.stamen.com/terrain/15/5234/12668.png
## Source : http://tile.stamen.com/terrain/15/5235/12668.png
## Source : http://tile.stamen.com/terrain/15/5236/12668.png
## Source : http://tile.stamen.com/terrain/15/5237/12668.png
## Source : http://tile.stamen.com/terrain/15/5238/12668.png
## Source : http://tile.stamen.com/terrain/15/5239/12668.png
## Source : http://tile.stamen.com/terrain/15/5240/12668.png
## Source : http://tile.stamen.com/terrain/15/5241/12668.png
## Source : http://tile.stamen.com/terrain/15/5242/12668.png
## Source : http://tile.stamen.com/terrain/15/5243/12668.png
## Source : http://tile.stamen.com/terrain/15/5244/12668.png
## Source : http://tile.stamen.com/terrain/15/5245/12668.png
## Source : http://tile.stamen.com/terrain/15/5246/12668.png
## Source : http://tile.stamen.com/terrain/15/5247/12668.png
## Source : http://tile.stamen.com/terrain/15/5248/12668.png
## Source : http://tile.stamen.com/terrain/15/5249/12668.png
## Source : http://tile.stamen.com/terrain/15/5250/12668.png
## Source : http://tile.stamen.com/terrain/15/5251/12668.png
## Source : http://tile.stamen.com/terrain/15/5228/12669.png
## Source : http://tile.stamen.com/terrain/15/5229/12669.png
## Source : http://tile.stamen.com/terrain/15/5230/12669.png
## Source : http://tile.stamen.com/terrain/15/5231/12669.png
## Source : http://tile.stamen.com/terrain/15/5232/12669.png
## Source : http://tile.stamen.com/terrain/15/5233/12669.png
## Source : http://tile.stamen.com/terrain/15/5234/12669.png
## Source : http://tile.stamen.com/terrain/15/5235/12669.png
## Source : http://tile.stamen.com/terrain/15/5236/12669.png
## Source : http://tile.stamen.com/terrain/15/5237/12669.png
## Source : http://tile.stamen.com/terrain/15/5238/12669.png
## Source : http://tile.stamen.com/terrain/15/5239/12669.png
## Source : http://tile.stamen.com/terrain/15/5240/12669.png
## Source : http://tile.stamen.com/terrain/15/5241/12669.png
## Source : http://tile.stamen.com/terrain/15/5242/12669.png
## Source : http://tile.stamen.com/terrain/15/5243/12669.png
## Source : http://tile.stamen.com/terrain/15/5244/12669.png
## Source : http://tile.stamen.com/terrain/15/5245/12669.png
## Source : http://tile.stamen.com/terrain/15/5246/12669.png
## Source : http://tile.stamen.com/terrain/15/5247/12669.png
## Source : http://tile.stamen.com/terrain/15/5248/12669.png
## Source : http://tile.stamen.com/terrain/15/5249/12669.png
## Source : http://tile.stamen.com/terrain/15/5250/12669.png
## Source : http://tile.stamen.com/terrain/15/5251/12669.png
## Source : http://tile.stamen.com/terrain/15/5228/12670.png
## Source : http://tile.stamen.com/terrain/15/5229/12670.png
## Source : http://tile.stamen.com/terrain/15/5230/12670.png
## Source : http://tile.stamen.com/terrain/15/5231/12670.png
## Source : http://tile.stamen.com/terrain/15/5232/12670.png
## Source : http://tile.stamen.com/terrain/15/5233/12670.png
## Source : http://tile.stamen.com/terrain/15/5234/12670.png
## Source : http://tile.stamen.com/terrain/15/5235/12670.png
## Source : http://tile.stamen.com/terrain/15/5236/12670.png
## Source : http://tile.stamen.com/terrain/15/5237/12670.png
## Source : http://tile.stamen.com/terrain/15/5238/12670.png
## Source : http://tile.stamen.com/terrain/15/5239/12670.png
## Source : http://tile.stamen.com/terrain/15/5240/12670.png
## Source : http://tile.stamen.com/terrain/15/5241/12670.png
## Source : http://tile.stamen.com/terrain/15/5242/12670.png
## Source : http://tile.stamen.com/terrain/15/5243/12670.png
## Source : http://tile.stamen.com/terrain/15/5244/12670.png
## Source : http://tile.stamen.com/terrain/15/5245/12670.png
## Source : http://tile.stamen.com/terrain/15/5246/12670.png
## Source : http://tile.stamen.com/terrain/15/5247/12670.png
## Source : http://tile.stamen.com/terrain/15/5248/12670.png
## Source : http://tile.stamen.com/terrain/15/5249/12670.png
## Source : http://tile.stamen.com/terrain/15/5250/12670.png
## Source : http://tile.stamen.com/terrain/15/5251/12670.png
## Source : http://tile.stamen.com/terrain/15/5228/12671.png
## Source : http://tile.stamen.com/terrain/15/5229/12671.png
## Source : http://tile.stamen.com/terrain/15/5230/12671.png
## Source : http://tile.stamen.com/terrain/15/5231/12671.png
## Source : http://tile.stamen.com/terrain/15/5232/12671.png
## Source : http://tile.stamen.com/terrain/15/5233/12671.png
## Source : http://tile.stamen.com/terrain/15/5234/12671.png
## Source : http://tile.stamen.com/terrain/15/5235/12671.png
## Source : http://tile.stamen.com/terrain/15/5236/12671.png
## Source : http://tile.stamen.com/terrain/15/5237/12671.png
## Source : http://tile.stamen.com/terrain/15/5238/12671.png
## Source : http://tile.stamen.com/terrain/15/5239/12671.png
## Source : http://tile.stamen.com/terrain/15/5240/12671.png
## Source : http://tile.stamen.com/terrain/15/5241/12671.png
## Source : http://tile.stamen.com/terrain/15/5242/12671.png
## Source : http://tile.stamen.com/terrain/15/5243/12671.png
## Source : http://tile.stamen.com/terrain/15/5244/12671.png
## Source : http://tile.stamen.com/terrain/15/5245/12671.png
## Source : http://tile.stamen.com/terrain/15/5246/12671.png
## Source : http://tile.stamen.com/terrain/15/5247/12671.png
## Source : http://tile.stamen.com/terrain/15/5248/12671.png
## Source : http://tile.stamen.com/terrain/15/5249/12671.png
## Source : http://tile.stamen.com/terrain/15/5250/12671.png
## Source : http://tile.stamen.com/terrain/15/5251/12671.png
## Source : http://tile.stamen.com/terrain/15/5228/12672.png
## Source : http://tile.stamen.com/terrain/15/5229/12672.png
## Source : http://tile.stamen.com/terrain/15/5230/12672.png
## Source : http://tile.stamen.com/terrain/15/5231/12672.png
## Source : http://tile.stamen.com/terrain/15/5232/12672.png
## Source : http://tile.stamen.com/terrain/15/5233/12672.png
## Source : http://tile.stamen.com/terrain/15/5234/12672.png
## Source : http://tile.stamen.com/terrain/15/5235/12672.png
## Source : http://tile.stamen.com/terrain/15/5236/12672.png
## Source : http://tile.stamen.com/terrain/15/5237/12672.png
## Source : http://tile.stamen.com/terrain/15/5238/12672.png
## Source : http://tile.stamen.com/terrain/15/5239/12672.png
## Source : http://tile.stamen.com/terrain/15/5240/12672.png
## Source : http://tile.stamen.com/terrain/15/5241/12672.png
## Source : http://tile.stamen.com/terrain/15/5242/12672.png
## Source : http://tile.stamen.com/terrain/15/5243/12672.png
## Source : http://tile.stamen.com/terrain/15/5244/12672.png
## Source : http://tile.stamen.com/terrain/15/5245/12672.png
## Source : http://tile.stamen.com/terrain/15/5246/12672.png
## Source : http://tile.stamen.com/terrain/15/5247/12672.png
## Source : http://tile.stamen.com/terrain/15/5248/12672.png
## Source : http://tile.stamen.com/terrain/15/5249/12672.png
## Source : http://tile.stamen.com/terrain/15/5250/12672.png
## Source : http://tile.stamen.com/terrain/15/5251/12672.png
## Source : http://tile.stamen.com/terrain/15/5228/12673.png
## Source : http://tile.stamen.com/terrain/15/5229/12673.png
## Source : http://tile.stamen.com/terrain/15/5230/12673.png
## Source : http://tile.stamen.com/terrain/15/5231/12673.png
## Source : http://tile.stamen.com/terrain/15/5232/12673.png
## Source : http://tile.stamen.com/terrain/15/5233/12673.png
## Source : http://tile.stamen.com/terrain/15/5234/12673.png
## Source : http://tile.stamen.com/terrain/15/5235/12673.png
## Source : http://tile.stamen.com/terrain/15/5236/12673.png
## Source : http://tile.stamen.com/terrain/15/5237/12673.png
## Source : http://tile.stamen.com/terrain/15/5238/12673.png
## Source : http://tile.stamen.com/terrain/15/5239/12673.png
## Source : http://tile.stamen.com/terrain/15/5240/12673.png
## Source : http://tile.stamen.com/terrain/15/5241/12673.png
## Source : http://tile.stamen.com/terrain/15/5242/12673.png
## Source : http://tile.stamen.com/terrain/15/5243/12673.png
## Source : http://tile.stamen.com/terrain/15/5244/12673.png
## Source : http://tile.stamen.com/terrain/15/5245/12673.png
## Source : http://tile.stamen.com/terrain/15/5246/12673.png
## Source : http://tile.stamen.com/terrain/15/5247/12673.png
## Source : http://tile.stamen.com/terrain/15/5248/12673.png
## Source : http://tile.stamen.com/terrain/15/5249/12673.png
## Source : http://tile.stamen.com/terrain/15/5250/12673.png
## Source : http://tile.stamen.com/terrain/15/5251/12673.png
## Source : http://tile.stamen.com/terrain/15/5228/12674.png
## Source : http://tile.stamen.com/terrain/15/5229/12674.png
## Source : http://tile.stamen.com/terrain/15/5230/12674.png
## Source : http://tile.stamen.com/terrain/15/5231/12674.png
## Source : http://tile.stamen.com/terrain/15/5232/12674.png
## Source : http://tile.stamen.com/terrain/15/5233/12674.png
## Source : http://tile.stamen.com/terrain/15/5234/12674.png
## Source : http://tile.stamen.com/terrain/15/5235/12674.png
## Source : http://tile.stamen.com/terrain/15/5236/12674.png
## Source : http://tile.stamen.com/terrain/15/5237/12674.png
## Source : http://tile.stamen.com/terrain/15/5238/12674.png
## Source : http://tile.stamen.com/terrain/15/5239/12674.png
## Source : http://tile.stamen.com/terrain/15/5240/12674.png
## Source : http://tile.stamen.com/terrain/15/5241/12674.png
## Source : http://tile.stamen.com/terrain/15/5242/12674.png
## Source : http://tile.stamen.com/terrain/15/5243/12674.png
## Source : http://tile.stamen.com/terrain/15/5244/12674.png
## Source : http://tile.stamen.com/terrain/15/5245/12674.png
## Source : http://tile.stamen.com/terrain/15/5246/12674.png
## Source : http://tile.stamen.com/terrain/15/5247/12674.png
## Source : http://tile.stamen.com/terrain/15/5248/12674.png
## Source : http://tile.stamen.com/terrain/15/5249/12674.png
## Source : http://tile.stamen.com/terrain/15/5250/12674.png
## Source : http://tile.stamen.com/terrain/15/5251/12674.png
## Source : http://tile.stamen.com/terrain/15/5228/12675.png
## Source : http://tile.stamen.com/terrain/15/5229/12675.png
## Source : http://tile.stamen.com/terrain/15/5230/12675.png
## Source : http://tile.stamen.com/terrain/15/5231/12675.png
## Source : http://tile.stamen.com/terrain/15/5232/12675.png
## Source : http://tile.stamen.com/terrain/15/5233/12675.png
## Source : http://tile.stamen.com/terrain/15/5234/12675.png
## Source : http://tile.stamen.com/terrain/15/5235/12675.png
## Source : http://tile.stamen.com/terrain/15/5236/12675.png
## Source : http://tile.stamen.com/terrain/15/5237/12675.png
## Source : http://tile.stamen.com/terrain/15/5238/12675.png
## Source : http://tile.stamen.com/terrain/15/5239/12675.png
## Source : http://tile.stamen.com/terrain/15/5240/12675.png
## Source : http://tile.stamen.com/terrain/15/5241/12675.png
## Source : http://tile.stamen.com/terrain/15/5242/12675.png
## Source : http://tile.stamen.com/terrain/15/5243/12675.png
## Source : http://tile.stamen.com/terrain/15/5244/12675.png
## Source : http://tile.stamen.com/terrain/15/5245/12675.png
## Source : http://tile.stamen.com/terrain/15/5246/12675.png
## Source : http://tile.stamen.com/terrain/15/5247/12675.png
## Source : http://tile.stamen.com/terrain/15/5248/12675.png
## Source : http://tile.stamen.com/terrain/15/5249/12675.png
## Source : http://tile.stamen.com/terrain/15/5250/12675.png
## Source : http://tile.stamen.com/terrain/15/5251/12675.png

use ggmap,darkenis used to change color and tranparency(it’s like a filter)

geom_segment,data choose “Type=0”(according to Tatsuya,0s are valid trips)

geom in ggplot packahe means “geometric ###scale_ is used to control the coordinate ###set x,y as OD, not sure what is scale_alpha and others doing

# Darken allows us to lighten up the map
ggmap(mpls,darken = c(.8,"#FFFFFF")) +
    geom_segment(data = df[df['Type']==0,],
               aes(x = Origin_lon, 
                   y = Origin_lat,
                   xend = Dest_lon,
                   yend = Dest_lat,
                   alpha = 0.2),
               color = "red") + coord_cartesian() +
 
  scale_alpha(range = c(0.0001, 0.5)) +
  scale_size_continuous(range(4,100)) +
  scale_color_viridis_c() + 
  scale_fill_viridis_c() + 
  theme_nothing()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
## Warning: Removed 74 rows containing missing values (geom_segment).

Point Plot

P <- ggmap(mpls) + 
  geom_point(aes(x = Origin_lon, y = Origin_lat), colour = "#FF0000", data =df, alpha=0.25, size = 0.5) +
  ggtitle("Origin Trip Data")

Density Plot

P1 <- ggmap(mpls,darken = c(0.1,"#FFFFFF"))+
   stat_density2d(
    aes(x = Origin_lon, y = Origin_lat, fill = ..level.., alpha = 0.1),
    size = 0.01, bins = 30, data = df,
    geom = "polygon"
  ) +scale_fill_gradient(low = "#FFCCCC", high= "red")
P1
## Warning: Removed 74 rows containing non-finite values (stat_density2d).

PreProcessing for ZIP.Codes

require(plyr)
## Loading required package: plyr
## -------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## -------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following object is masked from 'package:lubridate':
## 
##     here
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
#spatial to df
 ZIP.Codes@data$id = rownames(ZIP.Codes@data)
  zip.points = fortify(ZIP.Codes, region="id")
  zip.df = join(zip.points, ZIP.Codes@data, by="id")
 Zip.Centroid <- read.csv('./zipcode_centroid.csv', sep=",", header=TRUE)

Zone and Aggregation Plot for O

#origin plot
test<-as.data.frame(cbind(df$Origin_lon,df$Origin_lat))
coordinates(test) = ~V1+V2
proj4string(test) <- crs(ZIP.Codes)
O.count<-as.data.frame(poly.counts(test, ZIP.Codes))


O<-as.data.frame(cbind(zone=c(ZIP.Codes@data$zip_code), O.count))
O<- O[-c(6, 10, 11, 27, 28), ]

O.MAP<-cbind(cbind(O, lat=c(Zip.Centroid$lat)), lon=c(Zip.Centroid$lon))
colnames(O.MAP)[colnames(O.MAP)=="poly.counts(test, ZIP.Codes)" ] <- "size"
P2= ggmap(mpls)+
  geom_polygon(data=zip.df, aes(x = long, y = lat, group = zip), color = "#000000", alpha=0.01)+
    geom_point(data=O.MAP, aes(x= lon,y= lat, size=size), color="#FF0000")
    P2

Zone and Aggregation Plot for D

#desitination plot
test1 <- as.data.frame(cbind(df$Dest_lon, df$Dest_lat))
coordinates(test1) = ~V1+V2
proj4string(test1) <- crs(ZIP.Codes)
D.Count <- poly.counts(test1, ZIP.Codes)

D <- as.data.frame(cbind(zone=c(ZIP.Codes@data$zip_code),D.Count))
D <- D[-c(6,10,11,27,28), ]

D.MAP <- cbind(cbind(D,lat=c(Zip.Centroid$lat)),lon=c(Zip.Centroid$lon))
 colnames(D.MAP)[colnames(D.MAP)=="D.Count" ] <- "size"
P3= ggmap(mpls)+
    geom_polygon(data=zip.df, aes(x = long, y = lat,group = zip), color = "#000000", alpha=0.01)+
geom_point(data=D.MAP, aes(D.MAP$lon, D.MAP$lat, size= size), color="#27408B")
P3